/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package LlamadasTelefonicas;

import clienteSandraParada.Login;
import java.awt.Color;
import java.awt.Desktop;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JLabel;
import javax.swing.table.DefaultTableModel;
import clienteSandraParada.Mensajeria;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
//import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;

/**
 * El objetivo de esta clase es mostrar el formulario con los
 * datos requeridos para registrar un LLamadaTelefonica en el Sistema.
 *
 * @author Franzel
 */
public class DialogoInfoLlamadaTelefonica extends javax.swing.JDialog {

    private int filaClick = -1;
    private int columnaClick = -1;
    private LlamadaTelefonica llamada;
    private String rutAnterior;
    private int costoPorSegundo = 4;
    int costoTotal = 0;
    int costoLlamada = 0;
    String valorAnterior;

    /** Constructor de la clase, recibe todos los parámetros
     * e inicializa las variables de la clase */
    public DialogoInfoLlamadaTelefonica(java.awt.Frame parent, boolean modal, LlamadaTelefonica llamada) {
        super(parent, modal);
        initComponents();
        valorAnterior = "";
        this.llamada = llamada;
//        AutoCompleteDecorator.decorate(this.campoNombreProfesional);
//        AutoCompleteDecorator.decorate(this.campoNombrePaciente);
        this.setLocationRelativeTo(null);
        this.campoFecha.setEnabled(false);
        this.campoTelefono.getTelefono().setEditable(false);
        this.campoCelular.getCelular().setEditable(false);
        this.campoRutPaciente.setEditable(false);
        this.campoRutProfesional.setEditable(false);
        this.campoHora.setEditable(false);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        botonFormularioAccion = new javax.swing.JButton();
        botonFormularioSalida = new javax.swing.JButton();
        panelIInfoLlamada = new javax.swing.JPanel();
        jLabel18 = new javax.swing.JLabel();
        campoDuracion = new javax.swing.JTextField();
        jLabel20 = new javax.swing.JLabel();
        campoCosto = new javax.swing.JTextField();
        campoFecha = new com.toedter.calendar.JDateChooser();
        jLabel9 = new javax.swing.JLabel();
        campoHora = new javax.swing.JTextField();
        jLabel10 = new javax.swing.JLabel();
        panelDatosPaciente = new javax.swing.JPanel();
        jLabel13 = new javax.swing.JLabel();
        jLabel15 = new javax.swing.JLabel();
        asterisco2 = new javax.swing.JLabel();
        campoCelular = new componentes.Celular();
        jLabel16 = new javax.swing.JLabel();
        jLabel14 = new javax.swing.JLabel();
        campoTelefono = new componentes.Telefono();
        campoRutPaciente = new javax.swing.JTextField();
        campoNombrePaciente = new javax.swing.JComboBox();
        panelDatosProfesional = new javax.swing.JPanel();
        jLabel6 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        campoRutProfesional = new javax.swing.JTextField();
        asterisco1 = new javax.swing.JLabel();
        campoNombreProfesional = new javax.swing.JComboBox();
        camposObligatorios = new javax.swing.JLabel();
        mensajesAdvertencia = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        botonFormularioAccion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Agregar.png"))); // NOI18N
        botonFormularioAccion.setText("Agregar");
        botonFormularioAccion.setToolTipText("Agregar");
        botonFormularioAccion.setAlignmentY(0.0F);
        botonFormularioAccion.setMaximumSize(new java.awt.Dimension(95, 25));
        botonFormularioAccion.setMinimumSize(new java.awt.Dimension(95, 25));
        botonFormularioAccion.setPreferredSize(new java.awt.Dimension(95, 25));
        botonFormularioAccion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonFormularioAccionActionPerformed(evt);
            }
        });

        botonFormularioSalida.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Cancelar.png"))); // NOI18N
        botonFormularioSalida.setText("Cancelar");
        botonFormularioSalida.setToolTipText("Eliminar");
        botonFormularioSalida.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonFormularioSalidaActionPerformed(evt);
            }
        });

        panelIInfoLlamada.setBorder(javax.swing.BorderFactory.createTitledBorder("Informacion de la llamada"));
        panelIInfoLlamada.setForeground(new java.awt.Color(102, 255, 51));

        jLabel18.setText("Duración llamada en segundos:");

        campoDuracion.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                campoDuracionKeyReleased(evt);
            }
        });

        jLabel20.setText("Costo de la llamada:               $");

        campoCosto.setEditable(false);

        jLabel9.setText("Fecha:");

        jLabel10.setText("Hora:");

        javax.swing.GroupLayout panelIInfoLlamadaLayout = new javax.swing.GroupLayout(panelIInfoLlamada);
        panelIInfoLlamada.setLayout(panelIInfoLlamadaLayout);
        panelIInfoLlamadaLayout.setHorizontalGroup(
            panelIInfoLlamadaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelIInfoLlamadaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelIInfoLlamadaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelIInfoLlamadaLayout.createSequentialGroup()
                        .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(campoFecha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(campoHora, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelIInfoLlamadaLayout.createSequentialGroup()
                        .addGroup(panelIInfoLlamadaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel18)
                            .addComponent(jLabel20))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(panelIInfoLlamadaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(campoCosto, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(campoDuracion, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelIInfoLlamadaLayout.setVerticalGroup(
            panelIInfoLlamadaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelIInfoLlamadaLayout.createSequentialGroup()
                .addGroup(panelIInfoLlamadaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(campoFecha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(campoHora, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(panelIInfoLlamadaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel18)
                    .addComponent(campoDuracion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelIInfoLlamadaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel20, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(campoCosto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        panelDatosPaciente.setBorder(javax.swing.BorderFactory.createTitledBorder("Datos paciente"));
        panelDatosPaciente.setForeground(new java.awt.Color(102, 255, 51));

        jLabel13.setText("Nombre:");

        jLabel15.setText("Rut:");

        asterisco2.setText("*");

        jLabel16.setText("Celular:");

        jLabel14.setText("Teléfono:");

        campoNombrePaciente.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Seleccionar" }));
        campoNombrePaciente.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                campoNombrePacientePropertyChange(evt);
            }
        });

        javax.swing.GroupLayout panelDatosPacienteLayout = new javax.swing.GroupLayout(panelDatosPaciente);
        panelDatosPaciente.setLayout(panelDatosPacienteLayout);
        panelDatosPacienteLayout.setHorizontalGroup(
            panelDatosPacienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDatosPacienteLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelDatosPacienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel13))
                .addGap(18, 18, 18)
                .addGroup(panelDatosPacienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelDatosPacienteLayout.createSequentialGroup()
                        .addComponent(campoNombrePaciente, javax.swing.GroupLayout.PREFERRED_SIZE, 165, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(asterisco2, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(campoCelular, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(panelDatosPacienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(campoRutPaciente, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(campoTelefono, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 95, Short.MAX_VALUE)))
                .addContainerGap())
        );
        panelDatosPacienteLayout.setVerticalGroup(
            panelDatosPacienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDatosPacienteLayout.createSequentialGroup()
                .addGroup(panelDatosPacienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel13, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(panelDatosPacienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(campoNombrePaciente, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(asterisco2)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelDatosPacienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelDatosPacienteLayout.createSequentialGroup()
                        .addComponent(campoRutPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(campoTelefono, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(campoCelular, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelDatosPacienteLayout.createSequentialGroup()
                        .addComponent(jLabel15)
                        .addGap(12, 12, 12)
                        .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(7, 7, 7)
                        .addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        panelDatosProfesional.setBorder(javax.swing.BorderFactory.createTitledBorder("Datos profesional"));
        panelDatosProfesional.setForeground(new java.awt.Color(102, 255, 51));

        jLabel6.setText("Nombre:");

        jLabel8.setText("Rut:");

        asterisco1.setText("*");

        campoNombreProfesional.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Seleccionar" }));
        campoNombreProfesional.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                campoNombreProfesionalPropertyChange(evt);
            }
        });

        javax.swing.GroupLayout panelDatosProfesionalLayout = new javax.swing.GroupLayout(panelDatosProfesional);
        panelDatosProfesional.setLayout(panelDatosProfesionalLayout);
        panelDatosProfesionalLayout.setHorizontalGroup(
            panelDatosProfesionalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDatosProfesionalLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelDatosProfesionalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel8)
                    .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelDatosProfesionalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelDatosProfesionalLayout.createSequentialGroup()
                        .addComponent(campoNombreProfesional, javax.swing.GroupLayout.PREFERRED_SIZE, 165, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(asterisco1, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(campoRutProfesional, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelDatosProfesionalLayout.setVerticalGroup(
            panelDatosProfesionalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDatosProfesionalLayout.createSequentialGroup()
                .addGroup(panelDatosProfesionalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(panelDatosProfesionalLayout.createSequentialGroup()
                        .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelDatosProfesionalLayout.createSequentialGroup()
                        .addGroup(panelDatosProfesionalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(campoNombreProfesional, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(asterisco1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(campoRutProfesional, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(23, 23, 23))
        );

        camposObligatorios.setText("* Campos obligatorios");

        mensajesAdvertencia.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        mensajesAdvertencia.setText("Área de mensajería");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(mensajesAdvertencia, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(botonFormularioAccion, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botonFormularioSalida))
                    .addComponent(camposObligatorios, javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelIInfoLlamada, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(panelDatosPaciente, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(panelDatosProfesional, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelDatosProfesional, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panelDatosPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(panelIInfoLlamada, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(camposObligatorios, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(10, 10, 10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonFormularioSalida)
                    .addComponent(botonFormularioAccion, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(mensajesAdvertencia, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        botonFormularioSalida.getAccessibleContext().setAccessibleDescription("Cancelar");

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Método Action Performed del boton de Accion en el formulario LLamadaTelefonica.
     * @param variable de tipo ActionEvent con el evento del boton.
     **/
    private void botonFormularioAccionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonFormularioAccionActionPerformed
        this.costoTotal = Integer.parseInt(this.llamada.campoCosto.getText());

        java.util.List<service.LLamadaTelefonica> llamadas = this.listarLLamadaTelefonicas();
        boolean encontrado = false;
        //Revisa que un usuario creado no se repita

        if (validarCampos()) {
            this.dispose();
            int fila = -1;
            if (this.getTitle().equals("Agregar Llamada Telefónica")) {
                if (encontrado == false) {
                    cambiarEtiquetaMensajeria("Área de mensajería", Color.black);
                    service.LLamadaTelefonica ll = crearObjetoLLamadaTelefonica(new service.LLamadaTelefonica());
                    String valorNuevo = "Rut Profesional: " + ll.getRutProfesional() + "\n" + "Rut Paciente: " + ll.getRutPaciente()
                            + "\n" + "Duración: " + ll.getDuracion() + "\n" + "fecha: " + ll.getFecha() + "\n" + "hora: " + ll.getHora();
                    registrar(Login.getUser(), "Llamada Telefónica", "Agregó llamada telefónica a profesional:" + ll.getRutProfesional()+"de paciente :"+ll.getRutPaciente(), "No aplica", valorNuevo);
                    boolean rsp = agregarLLamadaTelefonica(ll);
                    this.llamada.getjLabel5().setText(Mensajeria.mensajeDeAccion("Llamada Telefónica", "agregar"));
                    fila = this.llamada.getContenedorLlamadasTelefonicas().getRowCount();
                    DefaultTableModel modelo = (DefaultTableModel) this.llamada.getContenedorLlamadasTelefonicas().getModel();

                    modelo.addRow(new String[4]);
                }
            } else if (this.getTitle().equals("Modificar Llamada Telefónica")) {
                service.LLamadaTelefonica llamada = null;
                String fecha = this.capturarFecha();
                String hora = this.campoHora.getText();
                java.util.List<service.LLamadaTelefonica> llamadast = listarLLamadaTelefonicas();
                for (service.LLamadaTelefonica l : llamadast) {
                    if (fecha.equals(l.getFecha()) && hora.equals(l.getHora())) {
                        llamada = l;
                        break;
                    }
                }
                service.LLamadaTelefonica ll = crearObjetoLLamadaTelefonica(llamada);
                modificarLLamadaTelefonica(ll);
                String valorNuevo = "Rut Profesional: " + ll.getRutProfesional() + "\n" + "Rut Paciente: " + ll.getRutPaciente()
                        + "\n" + "Duración: " + ll.getDuracion() + "\n" + "Fecha: " + ll.getFecha() + "\n" + "Hora: " + ll.getHora() + "\n Costo" + ll.getCosto();

                registrar(Login.getUser(), "Llamada Telefónica", "Modificó llamada telefónica a profesional:" + ll.getRutProfesional()+"de paciente :"+ll.getRutPaciente(), valorAnterior, valorNuevo);
                this.llamada.getjLabel5().setText(Mensajeria.mensajeDeAccion("Llamada Telefónica", "modificar"));
                fila = this.llamada.getContenedorLlamadasTelefonicas().getSelectedRow();
            } else {
                service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (p.isExportarLlamadaTelefonica()) {
                    fila = -1;
                    try {
                        exportarPDF();
                    } catch (DocumentException ex) {
                        Logger.getLogger(DialogoInfoLlamadaTelefonica.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (FileNotFoundException ex) {
                        Logger.getLogger(DialogoInfoLlamadaTelefonica.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }
            }

            if (fila != -1) {
                llamada.getContenedorLlamadasTelefonicas().setValueAt(this.campoNombreProfesional.getSelectedItem(), fila, 0);
                llamada.getContenedorLlamadasTelefonicas().setValueAt(this.campoNombrePaciente.getSelectedItem(), fila, 1);
                llamada.getContenedorLlamadasTelefonicas().setValueAt(this.capturarFecha(), fila, 2);
                llamada.getContenedorLlamadasTelefonicas().setValueAt(this.campoHora.getText(), fila, 3);
                llamada.getContenedorLlamadasTelefonicas().setValueAt(this.campoCosto.getText(), fila, 4);

            }


            if (this.campoCosto.getText().equals("") == false) {
                int costoActual = Integer.parseInt(this.campoCosto.getText());
                if (costoActual != costoLlamada) {
                    costoTotal = costoTotal - costoLlamada;
                    costoTotal = costoActual + costoTotal;
                }

            } else {
                if (costoTotal != 0) {
                    costoTotal = costoTotal - costoLlamada;
                }
            }
            this.llamada.campoCosto.setText(Integer.toString(costoTotal));


        }

    }//GEN-LAST:event_botonFormularioAccionActionPerformed
    /**
     * Método Action Performed del boton de Salida en el formulario LLamadaTelefonica
     * @param variable de tipo ActionEvent con el evento del boton
     **/
    private void botonFormularioSalidaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonFormularioSalidaActionPerformed
        // TODO add your handling code here:
        this.dispose();
}//GEN-LAST:event_botonFormularioSalidaActionPerformed

    private void campoNombreProfesionalPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_campoNombreProfesionalPropertyChange
        // TODO add your handling code here:
        String p = this.campoNombreProfesional.getSelectedItem().toString();
        String rut = "";
        if (p.equals("Seleccionar")) {
            this.campoRutProfesional.setText("");
        }


        java.util.List<service.Usuario> usuarios = listarUsuarios();
        for (service.Usuario u : usuarios) {
            if (u.getTipoCuenta().equals("Profesional")) {
                String profesional = u.getNombres() + " " + u.getApellidoPaterno() + " " + u.getApellidoMaterno();
                if (profesional.equals(p)) {
                    rut = u.getRut();
                    this.campoRutProfesional.setText(rut);

                }
            }
        }
        if (!campoNombreProfesional.getSelectedItem().equals("Seleccionar") && campoNombrePaciente.getSelectedItem().equals("Seleccionar")) {
            agregarItemPaciente(listarEnlaceProfesionalPacientes(), rut);
        }


    }//GEN-LAST:event_campoNombreProfesionalPropertyChange

    private void campoNombrePacientePropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_campoNombrePacientePropertyChange
        // TODO add your handling code here:

        String p = this.campoNombrePaciente.getSelectedItem().toString();
        String rut = "";
        if (p.equals("Seleccionar")) {
            this.campoRutPaciente.setText("");
        }

        java.util.List<service.Paciente> pacientes = listarPacientes();
        for (service.Paciente paciente : pacientes) {
            String pac = paciente.getNombres() + " " + paciente.getApellidoPaterno() + " " + paciente.getApellidoMaterno();
            if (pac.equals(p)) {
                rut = paciente.getRut();
                this.campoRutPaciente.setText(rut);
                if (paciente.getCelular() != null) {
                    this.campoCelular.getCelular().setText(paciente.getCelular());
                }
                if (paciente.getTelefono() != null) {
                    this.campoTelefono.getTelefono().setText(paciente.getTelefono());
                }

            }

        }

    }//GEN-LAST:event_campoNombrePacientePropertyChange

    private void campoDuracionKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_campoDuracionKeyReleased
        // TODO add your handling code here:
        if (!campoDuracion.getText().equals("")) {
            int duracion = Integer.parseInt(campoDuracion.getText());
            campoCosto.setText(Integer.toString(duracion * costoPorSegundo));
        } else {
            campoCosto.setText("");
        }

    }//GEN-LAST:event_campoDuracionKeyReleased
    /**
     * Método Action Performed de la tabla que almacena los horarios disponibles de
     * un LLamadaTelefonica.
     * @param variable de tipo MouseEvent con el evento del mouse en la tabla
     **/
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel asterisco1;
    private javax.swing.JLabel asterisco2;
    public javax.swing.JButton botonFormularioAccion;
    public javax.swing.JButton botonFormularioSalida;
    public componentes.Celular campoCelular;
    public javax.swing.JTextField campoCosto;
    public javax.swing.JTextField campoDuracion;
    public com.toedter.calendar.JDateChooser campoFecha;
    public javax.swing.JTextField campoHora;
    public javax.swing.JComboBox campoNombrePaciente;
    public javax.swing.JComboBox campoNombreProfesional;
    public javax.swing.JTextField campoRutPaciente;
    public javax.swing.JTextField campoRutProfesional;
    public componentes.Telefono campoTelefono;
    private javax.swing.JLabel camposObligatorios;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel14;
    private javax.swing.JLabel jLabel15;
    private javax.swing.JLabel jLabel16;
    private javax.swing.JLabel jLabel18;
    private javax.swing.JLabel jLabel20;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JLabel mensajesAdvertencia;
    private javax.swing.JPanel panelDatosPaciente;
    private javax.swing.JPanel panelDatosProfesional;
    private javax.swing.JPanel panelIInfoLlamada;
    // End of variables declaration//GEN-END:variables

    public void camposObligatoriosVisibles(boolean opcion) {
        this.asterisco1.setVisible(opcion);
        this.asterisco2.setVisible(opcion);
        this.camposObligatorios.setVisible(opcion);
        this.mensajesAdvertencia.setVisible(opcion);

        if (opcion) {
            this.setSize(355, 490);
        } else {
            this.setSize(335, 443);
        }
    }

    public void agregarItemPaciente(java.util.List<service.EnlaceProfesionalPaciente> enlaces, String rutProfesional) {

        campoNombrePaciente.removeAllItems();
        campoNombrePaciente.addItem("Seleccionar");
        for (service.EnlaceProfesionalPaciente e : enlaces) {
            if (e.getRutProfesional().equals(rutProfesional)) {
                service.Paciente paciente = (service.Paciente) cargarPaciente(e.getRutPaciente());
                campoNombrePaciente.addItem(paciente.getNombres() + " " + paciente.getApellidoPaterno() + " " + paciente.getApellidoMaterno());
            }
        }
    }

    /**
     * Método que deja en blanco todos los campos del diálogo formulario.
     **/
    public void limpiarCampos() {
        this.campoNombreProfesional.setSelectedIndex(0);
        this.campoRutProfesional.setText("");
        this.campoNombrePaciente.setSelectedIndex(0);
        this.campoRutPaciente.setText("");
        this.campoCelular.getCelular().setText("");
        this.campoTelefono.getTelefono().setText("");
        this.campoFecha.setDate(null); //campturar fecha del sistema
        this.campoHora.setText(""); //capturar hora
        this.campoDuracion.setText("");
        this.campoCosto.setText("");
    }

    /** 
     * Método que llena todos los campos del diálogo formulario a partir de un LLamadaTelefonica entregado.
     * @param variable user de tipo service.LLamadaTelefonica, que contiene el profesional externo con el que se llenaran los campos
     **/
    public void llenarCampos(service.LLamadaTelefonica llamada) {
        valorAnterior = "Rut Profesional: " + llamada.getRutProfesional() + "\n" + "Rut Paciente: " + llamada.getRutPaciente()
                + "\n" + "Duración: " + llamada.getDuracion() + "\n" + "Fecha: " + llamada.getFecha() + "\n" + "Hora: " + llamada.getHora() + "\n Costo" + llamada.getCosto();
        service.Usuario profesional = (service.Usuario) cargarUsuario(llamada.getRutProfesional());
        System.out.println(profesional);
        service.Paciente paciente = (service.Paciente) cargarPaciente(llamada.getRutPaciente());
        String nombreProfesional = profesional.getNombres() + " " + profesional.getApellidoPaterno() + " " + profesional.getApellidoMaterno();
        String nombrePaciente = paciente.getNombres() + " " + paciente.getApellidoPaterno() + " " + paciente.getApellidoMaterno();
        this.campoNombreProfesional.addItem(nombreProfesional);
        this.campoNombreProfesional.setSelectedItem(nombreProfesional);
        this.campoRutProfesional.setText(llamada.getRutProfesional());
        this.campoNombrePaciente.addItem(nombrePaciente);
        this.campoNombrePaciente.setSelectedItem(nombrePaciente);
        this.campoRutPaciente.setText(llamada.getRutPaciente());
        this.campoCelular.getCelular().setText(paciente.getCelular());
        this.campoTelefono.getTelefono().setText(paciente.getTelefono());
        this.campoFecha.setDate(stringToDate(llamada.getFecha())); //campturar fecha del sistema
        this.campoHora.setText(llamada.getHora()); //capturar hora
        this.campoDuracion.setText(llamada.getDuracion());
        this.campoCosto.setText(llamada.getCosto());
        if (llamada.getCosto().equals("")) {
            costoLlamada = 0;
        } else {
            costoLlamada = Integer.parseInt(llamada.getCosto());
        }
        System.out.println(costoLlamada);
    }

    /**
     * Método que crea un objeto de tipo LLamadaTelefonica seteando los campos de acuerdo al profesional
     * que se entrega como parametro.
     * @param variable user de tipo service.LLamadaTelefonica que contiene el profesional a modificar.
     * @return devuelve el objeto de tipo service.LLamadaTelefonica con los campos requeridos.
     **/
    public service.LLamadaTelefonica crearObjetoLLamadaTelefonica(service.LLamadaTelefonica llamada) {

        llamada.setRutProfesional(campoRutProfesional.getText());
        llamada.setRutPaciente(campoRutPaciente.getText());
        llamada.setDuracion(campoDuracion.getText());
        llamada.setCosto(campoCosto.getText());
        llamada.setFecha(capturarFecha());
        llamada.setHora(campoHora.getText());
        llamada.setActivo(true);
        return llamada;
    }

    /**
     * Método que habilita o deshabilita los campos que se encuentran en el
     * formulario, de acuerdo a la opción que tenga como parámetro.
     * @param variable opcion de tipo boolean, cuando es true se habilitan los
     * campos, en caso contrario se deshabilitan.
     **/
    public void habilitarCampos(boolean opcion) {

        this.campoNombreProfesional.setEnabled(opcion);
        this.campoNombrePaciente.setEnabled(opcion);
        this.campoDuracion.setEditable(opcion);
    }

    /**
     * Método que pasa una fecha con el formato de String a Date.
     * @param variable de tipo String llamada strFecha.
     * @return una variable del tipo Date con la fecha convertida a Date.
     **/
    public Date stringToDate(String strFecha) {
        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("dd-MM-yyyy");
        Date fecha = null;
        try {
            fecha = formatoDelTexto.parse(strFecha);
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
        return fecha;
    }

    /**
     * Método captura la fecha de naciemiento del Usuario.
     * @return una variable de tipo String que contiene la fecha de Nacimiento.
     **/
    public String capturarFecha() {
        Calendar cal = Calendar.getInstance();
        String fecha = "dd-MM-yyyy";
        if (this.campoFecha.getDate() != null) {
            cal.setTime(this.campoFecha.getDate());
            //Dia - mes - año
            fecha = Integer.toString(cal.get(Calendar.DAY_OF_MONTH)) + "-"
                    + Integer.toString(cal.get(Calendar.MONTH) + 1) + "-"
                    + Integer.toString(cal.get(Calendar.YEAR));
        }
        return fecha;

    }

    /**
     * Método que exporta a PDF la información del usuario que se está visualizando.
     **/
    public void exportarPDF() throws DocumentException, FileNotFoundException {
        Document document = new Document();
        String dirArchivo = eligeDireccionArchivo();

        if (!dirArchivo.equals(".pdf")) {
            /*Sección para hacer el pdf, el cuál queda guardado en escritorio con el nombre de LLamadaTelefonica*/

            Font fondoTitulo = new Font(Font.FontFamily.TIMES_ROMAN, 16, Font.BOLD);
            Font fondoSubTitulo = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD);
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dirArchivo));
            document.open();
            Paragraph p = new Paragraph("Información de la Llamada", fondoTitulo);
            p.setFirstLineIndent(150);
            document.add(p);

            /*Datos Profesional*/
            p = new Paragraph("Datos del Profesional", fondoSubTitulo);
            p.setSpacingAfter(10);
            p.setSpacingBefore(10);
            document.add(p);
            PdfPTable tablaDatosProfesional = new PdfPTable(2);
            tablaDatosProfesional.addCell("Nombres y Apellidos: ");
            tablaDatosProfesional.addCell(campoNombreProfesional.getSelectedItem().toString());
            tablaDatosProfesional.addCell("Rut: ");
            tablaDatosProfesional.addCell(campoRutProfesional.getText());
            document.add(tablaDatosProfesional);

            /*Datos Paciente*/
            p = new Paragraph("Datos del Paciente", fondoSubTitulo);
            p.setSpacingAfter(10);
            p.setSpacingBefore(10);
            document.add(p);
            PdfPTable tablaDatosPaciente = new PdfPTable(2);
            tablaDatosPaciente.addCell("Nombres y Apellidos: ");
            tablaDatosPaciente.addCell(campoNombrePaciente.getSelectedItem().toString());
            tablaDatosPaciente.addCell("Rut: ");
            tablaDatosPaciente.addCell(campoRutPaciente.getText());
            tablaDatosPaciente.addCell("Teléfono: ");
            tablaDatosPaciente.addCell(campoTelefono.getTelefono().getText());
            tablaDatosPaciente.addCell("Celular: ");
            tablaDatosPaciente.addCell(campoCelular.getCelular().getText());
            document.add(tablaDatosPaciente);


            /*Datos Llamada*/
            p = new Paragraph("Información de la llamada", fondoSubTitulo);
            p.setSpacingAfter(10);
            p.setSpacingBefore(10);
            document.add(p);
            PdfPTable tablaInfoLlamada = new PdfPTable(2);
            tablaInfoLlamada.addCell("Fecha: ");
            tablaInfoLlamada.addCell(capturarFecha());
            tablaInfoLlamada.addCell("Hora: ");
            tablaInfoLlamada.addCell(campoHora.getText());
            tablaInfoLlamada.addCell("Duración: ");
            tablaInfoLlamada.addCell(campoDuracion.getText() + " segundos");
            tablaInfoLlamada.addCell("Costo: ");
            tablaInfoLlamada.addCell("$ " + campoCosto.getText());
            document.add(tablaInfoLlamada);
            document.close();
            abrirArchivo(dirArchivo);
        }
    }

    /**
     * Método en el cual se elige el directorio para exportar a PDF, con jfileChooser.
     * @return una variable de tipo String que contiene la dirección en donde se almacenará el PDF.
     **/
    public String eligeDireccionArchivo() {
        String dirArchivo = "";
        JFileChooser jFileChooser1 = new JFileChooser();
        jFileChooser1.setDialogTitle("Guardar archivo:");
        jFileChooser1.setVisible(true);

        int r = jFileChooser1.showSaveDialog(null);
        if (r == JFileChooser.APPROVE_OPTION) {
            File file = jFileChooser1.getSelectedFile();
            dirArchivo = String.valueOf(file);
        }
        dirArchivo = dirArchivo.replace('\\', '/') + ".pdf";
        return dirArchivo;

    }

    /**
     * Método que abre el PDF de acuerdo a la dirección especificada.
     * @param variable de tipo String que contiene la dirección necesaria para abrir el documento.
     **/
    public void abrirArchivo(String direccion) {
        //Abre el documento pdf
        try {
            File file = new File(direccion);
            Desktop.getDesktop().open(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Método que valida los campos que se han ingresadoen el formulario, emitiendo un mensaje
     * de advertencia en caso de ser necesario.
     * Estos campos son telefono, email, celular, usuario, nombre, apellido paterno,
     * apellido materno, contraseña y rut.
     * @return una variable de tipo boolean. Cuando es true, significa que son validos los campos.
     **/
    public boolean validarCampos() {


        if (!campoRutProfesional.getText().equals("") && !campoRutPaciente.getText().equals("")) {
            cambiarEtiquetaMensajeria("Área de mensajería", Color.black);
            return true;
        }

        cambiarEtiquetaMensajeria(Mensajeria.mensajeCamposObligatorios(), Color.red);
        return false;
    }

    /**
     * Método que retorna el label en donde se dan a conocer los mensajes de advertencia.
     * @return variable de tipo JLabel.
     **/
    public JLabel getMensajesAdvertencia() {
        return mensajesAdvertencia;
    }

    /**
     * Método que cambia el mensaje del diálogo de acuerdo a lo que se requiera.
     * @param variable de tipo String con el mensaje
     * @param variable de tipo Color con el color del mensaje
     **/
    public void cambiarEtiquetaMensajeria(String mensaje, Color color) {
        this.mensajesAdvertencia.setText(mensaje);
        this.mensajesAdvertencia.setForeground(color);
    }

    /**
     * Aqui comienzan los métodos correspondientes a los servicios
     **/
    /**
     * Método que retorna la lista de Profesionales Externos que estan en la Base de Datos,
     * a través del servicio listarProfesionalesExternos.
     * @return variable de tipo java.util.List<service.LLamadaTelefonica> que contiene la
     * lista de profesionales externos.
     **/
    private static java.util.List<service.LLamadaTelefonica> listarLLamadaTelefonicas() {
        service.LLamadaTelefonicaWSService service = new service.LLamadaTelefonicaWSService();
        service.LLamadaTelefonicaWS port = service.getLLamadaTelefonicaWSPort();
        return port.listarLLamadaTelefonicas();
    }

    /**
     * Método que carga el profesional externo de la Base de Datos, a partir de un rut y
     * a través del servicio cargarLLamadaTelefonica.
     * @param variable de tipo String correspondiente al rut profesional externo a cargar.
     * @return variable de tipo Object que corresponde al LLamadaTelefonica cargado.
     **/
    private static Object cargarLLamadaTelefonica(java.lang.Long id) {
        service.LLamadaTelefonicaWSService service = new service.LLamadaTelefonicaWSService();
        service.LLamadaTelefonicaWS port = service.getLLamadaTelefonicaWSPort();
        return port.cargarLLamadaTelefonica(id);
    }

    /**
     * Método registra en la bitácora la acción realizada en el sistema
     **/
    private static Long registrar(service.Usuario usuario, java.lang.String modulo, java.lang.String accion, java.lang.String valorAnterior, java.lang.String valorNuevo) {
        service.BitacoraWSService service = new service.BitacoraWSService();
        service.BitacoraWS port = service.getBitacoraWSPort();
        return port.registrar(usuario, modulo, accion, valorAnterior, valorNuevo);
    }

    /**
     * Método que modifica el profesional externo que esta registrado en la Base de Datos,
     * a través del servicio modificarLLamadaTelefonica.
     * @param variable de tipo service.LLamadaTelefonica llamada arg0 que es el profesional externo a modificar.
     * @return variable de tipo boolean que indica si se realizó (true)
     * o no (false) la actualización del profesional externo.
     **/
    private static boolean modificarLLamadaTelefonica(service.LLamadaTelefonica llamada) {
        service.LLamadaTelefonicaWSService service = new service.LLamadaTelefonicaWSService();
        service.LLamadaTelefonicaWS port = service.getLLamadaTelefonicaWSPort();
        return port.modificarLLamadaTelefonica(llamada);
    }

    /**
     * Método que registra el usuario en la Base de Datos,
     * a través del servicio agregarLLamadaTelefonica.
     * @param variable de tipo service.LLamadaTelefonica llamada arg0 que es el LLamadaTelefonica a registrar.
     * @return variable de tipo boolean que indica si se realizó (true)
     * o no (false) el regitro del profesional externo.
     **/
    private static boolean agregarLLamadaTelefonica(service.LLamadaTelefonica llamada) {
        service.LLamadaTelefonicaWSService service = new service.LLamadaTelefonicaWSService();
        service.LLamadaTelefonicaWS port = service.getLLamadaTelefonicaWSPort();
        return port.agregarLLamadaTelefonica(llamada);
    }

    private static java.util.List<service.Usuario> listarUsuarios() {
        service.UsuarioWSService service = new service.UsuarioWSService();
        service.UsuarioWS port = service.getUsuarioWSPort();
        return port.listarUsuarios();
    }

    private static Object cargarPaciente(java.lang.String rut) {
        service.PacienteWS_Service service = new service.PacienteWS_Service();
        service.PacienteWS port = service.getPacienteWSPort();
        return port.cargarPaciente(rut);
    }

    private static java.util.List<service.Paciente> listarPacientes() {
        service.PacienteWS_Service service = new service.PacienteWS_Service();
        service.PacienteWS port = service.getPacienteWSPort();
        return port.listarPacientes();
    }

    private static java.util.List<service.EnlaceProfesionalPaciente> listarEnlaceProfesionalPacientes() {
        service.EnlaceProfesionalPacienteWSService service = new service.EnlaceProfesionalPacienteWSService();
        service.EnlaceProfesionalPacienteWS port = service.getEnlaceProfesionalPacienteWSPort();
        return port.listarEnlaceProfesionalPacientes();
    }

    private static Object cargarPrivilegios(java.lang.String rut) {
        service.PrivilegiosWS_Service service = new service.PrivilegiosWS_Service();
        service.PrivilegiosWS port = service.getPrivilegiosWSPort();
        return port.cargarPrivilegios(rut);
    }

    private static Object cargarUsuario(java.lang.String rut) {
        service.UsuarioWSService service = new service.UsuarioWSService();
        service.UsuarioWS port = service.getUsuarioWSPort();
        return port.cargarUsuario(rut);
    }
}
